package com.tes.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import com.tes.VO.PersonaVO;
import com.tes.VO.PriorizacionVO;
import com.tes.VO.RequerimientoVO;
import com.tes.VO.UsuarioPriorizacionVO;

public class ListadoWeb {
	
	public ByteArrayOutputStream f; 
	
	public void escribirFila(String fila)
	{
		try
		{
			fila+="\n";
			fila = fila.replace("[", "");
        	fila = fila.replace("]", "");
			byte buf[] = fila.getBytes();
			f.write(buf);
		}
		catch(Exception e){
			e.printStackTrace();
		}
	} 
	
	public void setF(ByteArrayOutputStream f)
	{
		this.f = f;
	}
	public ByteArrayOutputStream getF()
	{
		return f;
	}
	public ListadoWeb()
	{
		f = new ByteArrayOutputStream();
	}
	public ByteArrayInputStream recibirArchivo()
	{
		return new ByteArrayInputStream(f.toByteArray());
	}

	public void armarListado100PComparativo(ArrayList<ArrayList<ArrayList<String>>> matriz,List<PriorizacionVO> priorizacion)
	{
		String fila =" ;";
		
		for(PriorizacionVO prio:priorizacion)
		{
			fila += prio.getRequerimiento().getNombre()+";";
		}
		this.escribirFila(fila);
		fila="";
		for (int i = 0; i < matriz.size(); i++)
		{
			fila += priorizacion.get(i).getRequerimiento().getNombre()+";";
            for (int j = 0; j < matriz.size(); j++)
            {
            	fila += matriz.get(i).get(j)+";";
            }
            this.escribirFila(fila);
            fila="";
		}
		
	}

	public void armarListadoFinal100PBST(List<PriorizacionVO> priorizaciones)
	{
		String fila = "Numero;Nombre;Descripcion;Valor";
		this.escribirFila(fila);
		fila = "";
		for(PriorizacionVO prio:priorizaciones)
		{
			RequerimientoVO r = prio.getRequerimiento();
			fila=r.getNroRequerimiento()+";"+r.getNombre()+";"+r.getDescripcion()+";"+prio.getValor()+";";
			this.escribirFila(fila);
			fila="";
		}
		
	}

	public void armarListadoFinalPG(List<PriorizacionVO> priorizaciones)
	{
		String fila="Numero;Nombre;Descripcion;Categoria";
		this.escribirFila(fila);
		fila="";
		
		for(PriorizacionVO prio:priorizaciones)
		{
			fila = prio.getRequerimiento().getNroRequerimiento()+";";
			fila += prio.getRequerimiento().getNombre()+";";
			fila += prio.getRequerimiento().getDescripcion()+";";
			if(prio.getValor() == 0)
				fila += Constantes.PRIMERA_PRIORIDAD+";";
			if(prio.getValor() == 1)
				fila += Constantes.SEGUNDA_PRIORIDAD+";";
			if(prio.getValor() == 2)
				fila += Constantes.TERCERA_PRIORIDAD+";";
			
			this.escribirFila(fila);
			fila="";
		}
		
	}

	public void armarListadoUsuario100PBST(List<UsuarioPriorizacionVO> usuariosPriorizacion) {
		String fila = "Requerimientos;";
		for(UsuarioPriorizacionVO usu: usuariosPriorizacion){
			PersonaVO p=usu.getPersona();
			fila += p.getNombre()+" "+p.getApellido()+";";
		}
		this.escribirFila(fila);
		fila = "";
		
		List<String> requerimientos = new ArrayList<String>();
		for(int i=0;i<usuariosPriorizacion.get(0).getPriorizacion().size();i++){
			requerimientos.add(usuariosPriorizacion.get(0).getPriorizacion().get(i).getRequerimiento().getNombre());
		}
		
		for(int i=0;i<requerimientos.size();i++)
		{
			PriorizacionVO usuPrio = usuariosPriorizacion.get(0).getPriorizacion().get(i);
			
			fila += requerimientos.get(i)+";";
			for(int j=0;j < usuariosPriorizacion.size();j++){
				
				usuPrio = usuariosPriorizacion.get(j).getPriorizacion().get(i);
				fila += String.valueOf(usuPrio.getValor())+";"; 
			}
			
			this.escribirFila(fila);
			fila="";
		}
		
	}

	public void armarListadoUsuarioPG(List<UsuarioPriorizacionVO> usuariosPriorizacion) {

		String fila = "Requerimientos;";
		for(UsuarioPriorizacionVO usu: usuariosPriorizacion){
			fila += usu.getPersona().getNombre()+" "+usu.getPersona().getApellido()+";";
		}
		this.escribirFila(fila);
		fila = "";
		
		List<String> requerimientos = new ArrayList<String>();
		int posicion=0;
		boolean bandera = false;
		for(int j=0;j<usuariosPriorizacion.size() && !bandera;j++){
			for(int i=0;i<usuariosPriorizacion.get(j).getPriorizacion().size();i++){
				requerimientos.add(usuariosPriorizacion.get(j).getPriorizacion().get(i).getRequerimiento().getNombre());
				bandera=true;
				posicion=j;
			}
		}
		
		
		for(int i=0;i<requerimientos.size();i++)
		{
			PriorizacionVO usuPrio = usuariosPriorizacion.get(posicion).getPriorizacion().get(i);
			
			fila += requerimientos.get(i)+";";
			for(int j=0;j < usuariosPriorizacion.size();j++){
				if(usuariosPriorizacion.get(j).getPriorizacion().size()>0){
					usuPrio = usuariosPriorizacion.get(j).getPriorizacion().get(i);
					fila += this.armarFrase(usuPrio.getValor())+"/";
					if(usuPrio.getPerfilUsuario().equals(Constantes.USUARIO_NEGOCIO) || usuPrio.getPerfilUsuario().equals(Constantes.GERENTE_NEGOCIO)){
						fila +="NA;";
					}else{
						fila += String.valueOf(usuPrio.getEsfuerzo())+";";
					}
				}else{
					fila+="-;";
				}
				
				 
			}
			
			this.escribirFila(fila);
			fila="";
		}
		
	
		
	}

	private String armarFrase(float valor) {
		String result=null;
		if(valor == 0){
			result = Constantes.PRECISAMENTE;
		}else if(valor == 1){
			result = Constantes.RAZONABLEMENTE_BIEN;
		}else if(valor == 2){
			result = Constantes.NO_SE_PUEDE_ESTIMAR;
		}else if(valor == 3){
			result = Constantes.IMPRESCINDIBLE;
		}else if(valor == 4){
			result = Constantes.IMPORTANTE;
		}else if(valor == 5){
			result = Constantes.NICE_TO_HAVE;
		}
		return result;
	}


}

